原文連結:Using Control Structures in ABAP
如同大多數的程式語言,ABAP使用 IF / ELSEIF / ELSE作條件判斷,IF附帶的條件若未符合,就會繼續往下判斷,依此類推。並加上ENDIF結束判斷式。注意!每行條件後方都必須附帶句號(.)
IF c_number = 0.
out->write( `C_NUMBER 等於零` ).
ELSEIF c_number > 0.
out->write( `C_NUMBER 大於零` ).
ELSE.
out->write( `C_NUMBER 小於零` ).
ENDIF.
CONSTANTS x TYPE i VALUE 1.
CONSTANTS y TYPE i VALUE 2.
IF ( x < y AND y < X * 3 ) OR ( x < y * 2 ).
out->write( `判斷成立` ).
ELSE.
out->write( `判斷不成立` ).
ENDIF.
"判斷成立"
比較運算子:在ABAP中,=會根據所在位置決定是賦值還是比較
邏輯運算子:NOT優先於AND,AND優先於OR
DATA x TYPE i VALUE IS INITIAL.
x = 1.
IF x IS INITIAL.
out->write( `X為初始值` ).
ELSEIF x IS NOT INITIAL.
out->write( `X不為初始值` ).
ENDIF.
"X不為初始值"
ABAP中有一些比較特殊的邏輯表達式,可以省下不少功,例如:<data object> IS INITIAL
:當該物件為初始值則為true,<data object> IS NOT INITIAL
則相反。
另外,斷言函數(predicate functions)亦可以回傳布林值,如Contains( )
可以比較近似值,line_exists( )
則用於檢查表格中是否存在特定列。
CASE c_number.
WHEN 0.
out->write( `C_NUMBER 等於零` ).
WHEN 1.
out->write( `C_NUMBER 等於一` ).
WHEN 2.
out->write( `C_NUMBER 等於二` ).
WHEN OTHERS.
out->write( `C_NUMBER 不等於上述數值` ).
ENDCASE.
CASE則包含CASE / WHEN / WHEN OTHERS,CASE是被判斷的參數,WHEN則是判斷條件,當CASE與WHEN吻合,即會執行段落內的程式碼,用ENDCASE結束。推薦在有需要的時候,可以用於加強程式閱讀的語意性。
例外(exception)是執行時產生的錯誤狀態,我們可以根據錯誤發生的原因,分成系統例外(system exceptions)以及應用例外(application exceptions),沒有對這些例外進行更進一步處理的話,通常容易導致runtime error。
"模擬變數賦值數字時,故意賦值成字串的錯誤"
DATA result TYPE i.
CONSTANTS c_text TYPE string VALUE 'ABC'.
TRY.
result = c_text.
out->write( |賦值結果為 { result }| ).
CATCH cx_sy_conversion_no_number.
out->write( |錯誤: { c_text } 並非數值!| ).
ENDTRY.
通常使用TRY / CATCH / ENDTRY取得可捕獲的例外事件,另外,透過設置多個CATCH可以一次設定多個捕獲條件。
在ABAP中,有三種形式的迴圈:
DO c_number TIMES.
out->write( `Hello World` ).
ENDDO.
DATA number TYPE i VALUE 3.
DATA number_end TYPE i VALUE 0.
DO.
out->write( |{ sy-index } Value of number { number }| ).
number = number - 1.
IF number <= number_end.
EXIT.
ENDIF.
*輸出結果:
"1 Value of number 3"
"2 Value of number 2"
"3 Value of number 1"
註:sy-index
為當前迴圈的已跑次數
LOOP AT 的範例明天會再提及,敬請期待~